package com;

import java.util.ArrayList;
import java.util.Collection;

/**
 * boolean contains (Object o)
 * 		判断是否包含某个元素,底层会自动调用给对象的 equals
 * 			c.contains(m1) : m1 调用 equals 方法,和集合中的元素进行比较
 * 
 * boolean remove(Object o) 删除集合中某个元素,也会调用 equals 方法进行比较
 * 
 * 所以,我们在使用 remove 和 contains 的时候,注意覆写 equals 方法,因为删除和判断是否包含是需要通过 equals 方法定位元素的
 * 		但是 Object 中的 equals 方法默认比较内存地址,所以我们需要根据需求进行 equals 方法重写 
 * 
 * @author lenovo
 * @Date 2020年7月16日
 * @Time 下午7:45:48
 */
public class Collection_03 {
	public static void main(String[] args) {
		// 创建集合
		Collection c = new ArrayList();
		Integer i1 = new Integer(129);
		Integer i2 = new Integer(129);
		// 插入 i1
		c.add(i1);
		System.out.println(c.contains(i2));// true

		Manager m1 = new Manager(1, "张三");
		Manager m2 = new Manager(1, "张三");
		c.add(m1);
		System.out.println(c.contains(m2));// true
		System.out.println(c.size());// 2
		c.remove(m2);
		System.out.println(c.size());// 1
	}
}

class Manager {
	int no;
	String name;

	public Manager(int no, String name) {
		super();
		this.no = no;
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj instanceof Manager) {
			Manager m = (Manager) obj;
			if (m.no == this.no && m.name.equals(this.name)) {
				return true;
			}
		}
		return false;
	}
}